<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="zh" xml:lang="zh" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Concept: 分布模式 </title>
<meta name="uma.type" content="Concept">
<meta name="uma.name" content="distribution_patterns">
<meta name="uma.presentationName" content="分布模式 ">
<meta name="element_type" content="concept">
<meta name="filetype" content="description">
<meta name="role" content="">
<link rel="StyleSheet" href="./../../../css/default.css" type="text/css">
<script src="./../../../scripts/ContentPageResource.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageSubSection.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/ContentPageToolbar.js" type="text/javascript" language="JavaScript"></script><script src="./../../../scripts/contentPage.js" type="text/javascript" language="JavaScript"></script><script type="text/javascript" language="JavaScript">
					var backPath = './../../../';
					var imgPath = './../../../images/';
					var nodeInfo=null;
					contentPage.preload(imgPath, backPath, nodeInfo,  '', false, false, false);
				</script>
</head>
<body>
<div id="breadcrumbs"></div>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td valign="top"><a name="Top"></a>
<div id="page-guid" value="6.137181182978733E-305"></div>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="pageTitle" nowrap="true">Concept: 分布模式 </td><td width="100%">
<div align="right" id="contentPageToolbar"></div>
</td><td width="100%" class="expandCollapseLink" align="right"><a name="mainIndex" href="./../../../index.htm"></a><script language="JavaScript" type="text/javascript" src="./../../../scripts/treebrowser.js"></script></td>
</tr>
</table>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td class="pageTitleSeparator"><img src="./../../../images/shim.gif" alt="" title="" height="1"></td>
</tr>
</table>
<div class="overview">
<table width="97%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50"><img src="./../../../images/concept.gif" alt="" title=""></td><td>
<table class="overviewTable" border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">分布模式强调了系统解决方案在分布方面的重要性，以及分布方面影响其他架构决策的程度。</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Relationships</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<th class="sectionTableHeading" scope="row">Related Elements</th><td class="sectionTableCell">
<ul>
<li>
<a href="./../../../rup/domains/analysis_and_design_BD3BBB1D.html" guid="_kjFBYN7HEdm8G6yT7-Wdqw">分析与设计</a>
</li>
<li>
<a href="./../../../rup/tasks/architectural_analysis_2B9BE03.html" guid="{8CB48402-D4C5-4E17-BB33-507315CB1BBF}">架构分析</a>
</li>
<li>
<a href="./../../../rup/tasks/describe_distribution_9BA1477C.html" guid="{6A112808-0A90-427A-BAB9-E14F3FBF72B5}">描述分布</a>
</li>
<li>
<a href="./../../../rup/roles/rup_software_architect_DB0BF177.html" guid="{4AC346F0-E6FC-4D2C-8410-2EDF8DDDC91D}">软件架构师</a>
</li>
<li>
<a href="./../../../rup/capabilitypatterns/rup_software_architect_CB9312DF.html" guid="_xWYKs9x7Ed27Ld6FEj33Ng">软件架构师</a>
</li>
</ul>
</td>
</tr>
</table>
</div>
<div class="sectionHeading">Main Description</div>
<div class="sectionContent">
<table class="sectionTable" border="0" cellspacing="0" cellpadding="0">
<tr valign="top">
<td class="sectionTableSingleCell"><a id="Top" name="Top"></a><a id="XE_architecture__distribution_patterns" key="架构（architecture）" text="分发模式" name="XE_architecture__distribution_patterns" class="index"></a><a id="XE_distribution_patterns__introduction_to" key="分发模式（distribution patterns）" text="简介" name="XE_distribution_patterns__introduction_to" class="index"></a>
<h3>
    <a id="Nodes, Processors and Devices" name="Nodes, Processors and Devices">节点、处理器和设备</a>
</h3>
<p>
    处理器和设备是常见的节点构造型。似乎很难评估这两者之间的区别，因为许多设备现在都包含它们自己的 CPU。 但是，处理器和设备之间仍有区别，这在于它们上面执行的软件的类型。 处理器执行的程序／软件是明确地为正在开发的系统编写的。
    处理器是通用的计算设备，它具有计算容量、内存和执行能力。
</p>
<p>
    设备执行为控制设备自身的功能而编写的软件。 设备通常连接到控制该设备的处理器。它们通常执行嵌入式软件，不能运行通用程序。 它们的功能通常受设备驱动程序软件的控制。
</p>
<h3>
    <a id="Distribution Patterns" name="Distribution Patterns">分布模式</a>
</h3>
<p>
    系统中存在许多典型的分发模式，它们取决于系统的功能和应用程序的类型。 在许多情况下，非正式地使用分发模式来描述系统的“架构”，尽管完整的架构不仅包含它，而且还包含许多更多的内容。
    例如，许多时候系统将被描述为具有“客户机－服务器架构”，尽管这只是架构的分发方面。 这用来强调系统分发方面的重要性，以及分发方面影响其他架构决策的程度。
</p>
<p>
    下面描述的分发模式暗示了某些系统特征、性能特征和流程架构。 每种模式解决某些问题，但也构成独特的挑战。
</p>
<h3>
    <a id="Client/Server Architectures" name="Client/Server Architectures">客户机／服务器架构</a><a key="架构（architecture）" text="客户机／服务器" name="XE_architecture__client/server" id="XE_architecture__client/server" class="index"></a><a key="分发模式（distribution patterns）" text="客户机／服务器架构" name="XE_distribution_patterns__client/server_architectures" id="XE_distribution_patterns__client/server_architectures" class="index"></a>
</h3>
<p>
    在所谓的“客户机／服务器架构”中，有些专用的网络处理器节点称为<b>客户机</b>，而有些节点称为<b>服务器</b>。客户机是服务器提供的服务的使用者。客户机通常服务于单个用户，并经常处理最终用户的表示服务（GUI）；而服务器通常同时向数台客户机提供服务，所提供的服务通常是数据库服务、安全性服务或打印服务。
    这些系统中的“应用逻辑”或业务逻辑通常分布于客户机和服务器上。业务逻辑的分布称为<b>应用程序分区</b>。
</p>
<p>
    在下图中，客户机 A 显示了 2 层架构的示例，大部分应用逻辑均位于服务器中。 客户机 B 显示了典型的 3 层架构，其中业务服务在业务对象服务器中实现。 客户机 C 显示了典型的基于 Web 的应用程序。
</p>
<p align="center">
    <img src="./../../../rup/guidances/concepts/resources/dpatt01.gif" alt="在内容中描述了该图。" width="546" height="287" />
</p>
<p class="picturetext">
    客户机－服务器架构的变体
</p>
<p>
    在传统的客户机／服务器系统中，大部分业务逻辑在客户机上实现，但一些功能更适合于位于服务器上，例如常常要访问存储在服务器上的数据的功能。这样，人们可以减少网络通信，而网络流量在大多数情况下代价是十分昂贵的（其速度要比进程间通信慢一到两个数量级）。
</p>
<p>
    一些特征：
</p>
<ul>
    <li>
        系统可以由几种不同类型的客户机构成，例如： 
        <ul>
            <li>
                用户工作站
            </li>
            <li>
                网络计算机
            </li>
        </ul>
    </li>
    <li>
        客户机和服务器通过使用各种不同的技术进行通信，例如 CORBA/IDL 或 RPC（远程过程调用）技术。
    </li>
    <li>
        系统可以由几种不同类型的服务器构成，例如： 
        <ul>
            <li>
                <b>数据库服务器</b>，处理诸如 Sybase、Ingres、Oracle 和 Informix 之类的数据库机器
            </li>
            <li>
                <b>打印服务器</b>，处理诸如特定打印机的排队之类的驱动程序逻辑
            </li>
            <li>
                <b>通信服务器</b>（TCP/IP、ISDN、X.25）
            </li>
            <li>
                <b>窗口管理器服务器</b>（X）
            </li>
            <li>
                <b>文件服务器</b>（UNIX 下的 NFS）
            </li>
        </ul>
    </li>
</ul>
<h4>
    <a id="The 3-Tier Architecture" name="The 3-Tier Architecture">“3 层架构”</a><a key="架构（architecture）" text="3 层" name="XE_architecture__3-tier" id="XE_architecture__3-tier" class="index"></a><a key="分发模式（distribution patterns）" text="3 层" name="XE_distribution_patterns__3-tier_architecture" id="XE_distribution_patterns__3-tier_architecture" class="index"></a>
</h4>
<p>
    “3 层架构”是“客户机／服务器架构”的特例，其中系统的功能分成 3 个逻辑分区：应用程序服务、业务服务和数据服务。 实际上“逻辑分区”可以映射到 3 个或更多的物理节点。
</p>
<p align="center">
    <img src="./../../../rup/guidances/concepts/resources/3-tier.gif" alt="在内容中描述了该图。" width="175" height="268" />
</p>
<p class="picturetext">
    3 层架构的示例
</p>
<p>
    逻辑被划分到这三“层”中，这一做法反映了人们对典型办公应用程序的观察结果，即这类应用程序应从哪个方向进行实现以及它如何变化。应用程序服务主要处理 GUI 表示问题，它们倾向于在带有图形化、窗口化的操作环境的专用桌面工作站中执行。
    功能的更改往往受到易用性和美学方面考虑的支配，本质上是<b>人为因素</b>的问题。
</p>
<p>
    数据服务倾向于使用数据库服务器技术来实现，该技术倾向于在一个或多个高性能、高带宽的节点上执行，这些节点连接在网络上，向几百几千的用户提供服务。 在已存信息的表示和不同已存信息之间的关系变化时，数据访问倾向于随之而变。
</p>
<p>
    业务服务反映业务流程的具体编码。它们处理并合成从数据服务获取的信息，并提供给应用程序服务。 业务服务通常由许多用户共同使用，因此这些服务也倾向于位于专门的服务器上，尽管它们可以驻留在与数据服务相同的节点上。
</p>
<p>
    沿着这一连串服务的分区功能，为可伸缩性提供了一个相对可靠的模式：通过添加服务器和在数据和业务服务器之间重新平衡处理，来达到更高程度的可伸缩性。
</p>
<h4>
    <a id="The 'Fat Client Architecture'" name="The 'Fat Client Architecture'">“胖客户机架构”</a><a key="架构（architecture）" text="胖客户机" name="XE_architecture__fat-client" id="XE_architecture__fat-client" class="index"></a><a key="分发模式（distribution patterns）" text="胖客户机架构" name="XE_distribution_patterns__fat-client_architecture" id="XE_distribution_patterns__fat-client_architecture" class="index"></a>
</h4>
<p>
    之所以把客户机描述为“胖”，是因为几乎所有服务都在该客户机上运行（除了一种称为“两层架构”的变体，此时数据服务位于单独的节点上）。应用程序服务、业务服务和数据服务均驻留在客户机上，数据库服务器通常位于另一台机器上。
</p>
<p align="center">
    <img src="./../../../rup/guidances/concepts/resources/2-tier.gif" alt="在内容中描述了该图。" width="166" height="174" />
</p>
<p class="picturetext">
    传统的 2 层或“胖客户机”架构
</p>
<p>
    “胖客户机”的设计和构建相对简单，但却比较难以分发（它们往往既大又是整体式的）和维护。 因为客户机倾向于将数据在本地进行高速缓存以提高性能，所以本地高速缓存的一致性和相容性往往是需要引起特别关注的问题和领域。
    对位于多个本地高速缓存的共享对象的变更进行协调是很困难的，且代价不菲，因为涉及到将变更通过网络进行传播。
</p>
<h4>
    <a id="Web Application" name="Web Application">“胖服务器架构”</a><a key="架构（architecture）" text="胖服务器" name="XE_architecture__fat-server" id="XE_architecture__fat-server" class="index"></a><a key="分发模式（distribution patterns）" text="胖服务器架构" name="XE_distribution_patterns__fat-server_architecture" id="XE_distribution_patterns__fat-server_architecture" class="index"></a>
</h4>
<p>
    与“胖客户机”截然不同的另一面是“胖服务器”或“瘦客户机”。 典型的例子是运行一组 HTML 页面的 Web 浏览器应用程序，在客户机上几乎根本没有应用程序。 几乎所有的工作均发生在一台或多台 Web 服务器和数据服务器上。
</p>
<p align="center">
    <img src="./../../../rup/guidances/concepts/resources/dpatt04.gif" alt="在内容中描述了该图。" width="166" height="174" />
</p>
<p class="picturetext">
    Web 应用程序
</p>
<p>
    Web 应用程序易于分发，易于变更。开发和支持它们的代价相对较低（因为应用程序基础架构的大部分由浏览器和 Web 服务器提供）。
    不过它们可能不会提供对应用程序所需的控制级别，如果设计不佳，它们往往很快使网络饱和（有时即使设计良好也会很快使网络饱和）。
</p>
<h4>
    <a id="Distributed Client/Server" name="Distributed Client/Server">分布式客户机／服务器架构</a><a key="架构（architecture）" text="分布式客户机／服务器" name="XE_architecture__distributed_client/server" id="XE_architecture__distributed_client/server" class="index"></a><a key="分发模式（distribution patterns）" text="分布式客户机／服务器架构" name="XE_distribution_patterns__distributed_client/server_architecture" id="XE_distribution_patterns__distributed_client/server_architecture" class="index"></a>
</h4>
<p>
    在这种架构中，应用程序服务、业务服务和数据服务驻留在不同的节点上，在业务服务层和数据服务层中的服务器均可能是专门化的。 它是 3 层架构的完整实现。
</p>
<h3>
    <a id="The Peer-to-Peer Architecture" name="The Peer-to-Peer Architecture">点对点架构</a><a key="架构（architecture）" text="点对点" name="XE_architecture__peer-to-peer" id="XE_architecture__peer-to-peer" class="index"></a><a key="分发模式（distribution patterns）" text="点对点架构" name="XE_distribution_patterns__peer-to-peer_architecture" id="XE_distribution_patterns__peer-to-peer_architecture" class="index"></a>
</h3>
<p>
    在点对点架构中，系统中任何进程或节点都可以同时是客户机<b>和</b>服务器。达到功能分发的方法是，将相互关联的服务分组在一起，以使网络流量最少，同时使吞吐量和系统利用率最大。
    这样的系统往往很复杂，而且更需要意识到诸如死锁、进程间资源缺乏以及故障处理之类的问题。
</p><br />
<br /></td>
</tr>
</table>
</div>
<table class="copyright" border="0" cellspacing="0" cellpadding="0">
<tr>
<td class="copyright">Copyright &copy; 2008 版权所有 东软集团股份有限公司&nbsp; 联系邮箱:<a href="mailto:tcoe@neusoft.com">tcoe@neusoft.com</a></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
<script type="text/javascript" language="JavaScript">
				contentPage.onload();
			</script>
</html>
